/*
业务处理超时，查看服务器的处理情况
    当服务器，达到了性能瓶颈，在一次业务处理中，花费了太长时间（超过了设置的非活跃销毁）
        1、导致其他连接超时释放
        假设有 12345 描述符就绪了， 在处理1的时候花费了30s处理完，超时了，导致2345描述符因为⻓时间没有刷新活跃度，则存在两种可能处理结果：
            1. 如果接下来的2345描述符都是通信连接描述符，恰好本次也都就绪了事件，则并不影响，因为等1处理完了，接下来就会进⾏处理并刷新活跃度。
            2. 如果接下来的2号描述符是定时器事件描述符，定时器触发超时，执⾏定时任务，就会将345描述符给释放掉，这时候⼀旦345描述符对应的连接被释放，接下来在处理345事件的时候就会导致程序崩溃（内存访问错误）
               因此，在任意的事件处理中，都不应该直接对连接进⾏释放，⽽应该将释放操作压⼊到任务池中，等所有连接事件处理完了，然后执⾏任务池中的任务的时候再去进⾏释放。
*/
#include "../server.hpp"

int main()
{
    signal(SIGCHLD, SIG_IGN);
    for (int i = 0; i < 10; i++)
    {
        pid_t pid = fork();
        if (pid < 0)
        {
            DBG_LOG("FORK ERROR");
            return -1;
        }
        else if (pid == 0)
        {
            Socket client;
            client.CreateClient(8080, "127.0.0.1");
            std::string req = "GET /hello HTTP/1.1\r\nConnection: keep-alive\r\nContent-Length: 0\r\n\r\n";
            while (1)
            {
                assert(client.Send(req.c_str(), req.size()) != -1);
                char buf[1024] = {0};
                
                assert(client.Recv(buf, 1023));
                DBG_LOG("[%s]", buf);
            }
            client.Close();
            exit(0);
        }
    }
    while (1);
    return 0;
}